#include "stdio.h"
#include "pinControl.h"

int pinSetInterrupt(uint16_t gpio, uint16_t mode, GpioIrqFunc func, void *arg)
{
    int ret = 0;
    ret = GpioSetDir(gpio, INTERRUPT_MODE);
    if(ret != 0){
        printf("error: GpioSetDir gpio %d \n", gpio);
        return ret;
    }
    ret = GpioDisableIrq(gpio);
    if(ret != 0){
        printf("error: GpioDisableIrq gpio %d \n", gpio);
        return ret;
    }
    ret = GpioSetIrq(gpio, mode, func, arg);
    if(ret != 0){
        printf("error: GpioSetIrq gpio:%d ret:%d \n", gpio, ret);
        return ret;
    }
    ret = GpioEnableIrq(gpio);
    if(ret != 0){
        printf("error: GpioEnableIrq gpio %d \n", gpio);
        return ret;
    }
    return ret;
}

int pinUnsetInterrupt(uint16_t gpio)
{
    GpioDisableIrq(gpio);
    GpioUnsetIrq(gpio, NULL);
    return 0;
}


int pinReadValue(uint16_t gpio)
{
    int ret = 0;
    uint16_t val;

    ret = GpioRead(gpio, &val);
    if(ret != 0){
        printf("error: GpioRead gpio %d \n", gpio);
        return ret;
    }
    return val;
}

int pinWriteValue(uint16_t gpio, uint16_t val)
{
    int ret = 0;
    ret = GpioSetDir(gpio, INPUT_MODE);
    if(ret != 0){
        printf("error: GpioSetDir gpio %d \n", gpio);
        return ret;
    }
    ret = GpioWrite(gpio, val);
    if(ret != 0){
        printf("error: GpioWrite gpio %d \n", gpio);
        return ret;
    }
    return 0;
}